home *** CD-ROM | disk | FTP | other *** search
- // This is a part of the Active Template Library.
- // Copyright (C) 1996-1997 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Active Template Library Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Active Template Library product.
-
- #ifndef __STATREG_H
- #define __STATREG_H
-
- #define E_ATL_REGISTRAR_DESC 0x0201
- #define E_ATL_NOT_IN_MAP 0x0202
- #define E_ATL_UNEXPECTED_EOS 0x0203
- #define E_ATL_VALUE_SET_FAILED 0x0204
- #define E_ATL_RECURSE_DELETE_FAILED 0x0205
- #define E_ATL_EXPECTING_EQUAL 0x0206
- #define E_ATL_CREATE_KEY_FAILED 0x0207
- #define E_ATL_DELETE_KEY_FAILED 0x0208
- #define E_ATL_OPEN_KEY_FAILED 0x0209
- #define E_ATL_CLOSE_KEY_FAILED 0x020A
- #define E_ATL_UNABLE_TO_COERCE 0x020B
- #define E_ATL_BAD_HKEY 0x020C
- #define E_ATL_MISSING_OPENKEY_TOKEN 0x020D
- #define E_ATL_CONVERT_FAILED 0x020E
- #define E_ATL_TYPE_NOT_SUPPORTED 0x020F
- #define E_ATL_COULD_NOT_CONCAT 0x0210
- #define E_ATL_COMPOUND_KEY 0x0211
- #define E_ATL_INVALID_MAPKEY 0x0212
- #define E_ATL_UNSUPPORTED_VT 0x0213
- #define E_ATL_VALUE_GET_FAILED 0x0214
- #define E_ATL_VALUE_TOO_LARGE 0x0215
- #define E_ATL_MISSING_VALUE_DELIMETER 0x0216
- #define E_ATL_DATA_NOT_BYTE_ALIGNED 0x0217
-
- #ifndef ATL_NO_NAMESPACE
- namespace ATL
- {
- #endif
-
- const TCHAR chSemiColon = _T(';');
- const TCHAR chDirSep = _T('\\');
- const TCHAR chEscape = _T('\\');
- const TCHAR chComma = _T(',');
- const TCHAR chDelete = _T('~');
- const TCHAR chEOS = _T('\0');
- const TCHAR chTab = _T('\t');
- const TCHAR chLF = _T('\n');
- const TCHAR chCR = _T('\r');
- const TCHAR chSpace = _T(' ');
- const TCHAR chRightBracket = _T('}');
- const TCHAR chLeftBracket = _T('{');
- const TCHAR chVarLead = _T('%');
- const TCHAR chQuote = _T('\'');
- const TCHAR chEquals = _T('=');
- //const LPCTSTR szRightBracket = _T("}");
- //const LPCTSTR szLeftBracket = _T("{");
- //const LPCTSTR szEquals = _T("=");
- //const LPCTSTR szDirSep = _T("\\");
- const LPCTSTR szStringVal = _T("S");
- const LPCTSTR szDwordVal = _T("D");
- const LPCTSTR szBinaryVal = _T("B");
- const LPCTSTR szValToken = _T("Val");
- const LPCTSTR szForceRemove = _T("ForceRemove");
- const LPCTSTR szNoRemove = _T("NoRemove");
- const LPCTSTR szDelete = _T("Delete");
-
- struct EXPANDER
- {
- LPOLESTR szKey;
- LPOLESTR szValue;
- };
-
- class CExpansionVector
- {
- public:
- CExpansionVector()
- {
- m_cEls = 0;
- m_nSize=10;
- m_p=(EXPANDER**)malloc(m_nSize*sizeof(EXPANDER*));
- }
- HRESULT Add(LPCOLESTR lpszKey, LPCOLESTR lpszValue);
- LPCOLESTR Find(LPTSTR lpszKey);
- HRESULT ClearReplacements();
-
-
- private:
- EXPANDER** m_p;
- int m_cEls;
- int m_nSize;
- };
-
-
- #if defined(_ATL_DLL) | defined(_ATL_DLL_IMPL)
- class ATL_NO_VTABLE CRegObject
- : public IRegistrar
- #else
- class CRegObject
- #endif
- {
- public:
-
- ~CRegObject(){ClearReplacements();}
- HRESULT FinalConstruct() {return S_OK;}
- void FinalRelease() {}
-
-
- // Map based methods
- HRESULT STDMETHODCALLTYPE AddReplacement(LPCOLESTR lpszKey, LPCOLESTR lpszItem);
- HRESULT STDMETHODCALLTYPE ClearReplacements();
- LPCOLESTR StrFromMap(LPTSTR lpszKey);
-
- // Register via a given mechanism
- HRESULT STDMETHODCALLTYPE ResourceRegister(LPCOLESTR pszFileName, UINT nID, LPCOLESTR pszType);
- HRESULT STDMETHODCALLTYPE ResourceRegisterSz(LPCOLESTR pszFileName, LPCOLESTR pszID, LPCOLESTR pszType);
- HRESULT STDMETHODCALLTYPE ResourceUnregister(LPCOLESTR pszFileName, UINT nID, LPCOLESTR pszType);
- HRESULT STDMETHODCALLTYPE ResourceUnregisterSz(LPCOLESTR pszFileName, LPCOLESTR pszID, LPCOLESTR pszType);
- HRESULT STDMETHODCALLTYPE FileRegister(LPCOLESTR pszFileName);
- HRESULT STDMETHODCALLTYPE FileUnregister(LPCOLESTR pszFileName);
- HRESULT STDMETHODCALLTYPE StringRegister(LPCOLESTR pszData);
- HRESULT STDMETHODCALLTYPE StringUnregister(LPCOLESTR pszData);
-
- protected:
-
- HRESULT MemMapAndRegister(LPCOLESTR pszFileName, BOOL bRegister);
- HRESULT RegisterFromResource(LPCOLESTR pszFileName, LPCTSTR pszID, LPCTSTR pszType, BOOL bRegister);
- HRESULT RegisterWithString(LPCOLESTR pszData, BOOL bRegister);
-
-
- static HRESULT GenerateError(UINT nID);
-
- CExpansionVector m_RepMap;
- CComObjectThreadModel::AutoCriticalSection m_csMap;
- };
-
-
- class CRegParser
- {
- public:
- CRegParser(CRegObject* pRegObj);
-
- HRESULT PreProcessBuffer(LPTSTR lpszReg, LPTSTR* ppszReg);
- HRESULT RegisterBuffer(LPTSTR szReg, BOOL bRegister);
-
- protected:
-
- void SkipWhiteSpace();
- HRESULT NextToken(LPTSTR szToken);
- HRESULT AddValue(CRegKey& rkParent,LPCTSTR szValueName, LPTSTR szToken);
- BOOL CanForceRemoveKey(LPCTSTR szKey);
- BOOL HasSubKeys(HKEY hkey);
- BOOL HasValues(HKEY hkey);
- HRESULT RegisterSubkeys(HKEY hkParent, BOOL bRegister, BOOL bInRecovery = FALSE);
- BOOL IsSpace(TCHAR ch);
- void IncrementLinePos();
- void IncrementLineCount(){m_cLines++;}
-
-
- LPTSTR m_pchCur;
- int m_cLines;
-
- CRegObject* m_pRegObj;
-
- HRESULT GenerateError(UINT nID);
- HRESULT HandleReplacements(LPTSTR& szToken);
- HRESULT SkipAssignment(LPTSTR szToken);
-
- BOOL EndOfVar() { return chQuote == *m_pchCur && chQuote != *CharNext(m_pchCur); }
-
- };
-
- #ifndef ATL_NO_NAMESPACE
- }; //namespace ATL
- #endif
-
- #endif //__STATREG_H
-